/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package org.akizuky.gestortareas.bean;

import java.sql.ResultSet;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import org.akizuky.gestortareas.entity.Usuario;

/**
 *
 * @author Akizuky
 */
@Stateless
public class UsuarioFacade extends AbstractFacade<Usuario> {
    @PersistenceContext(unitName = "gestorTickets-ejbPU")
    private EntityManager em;

    @Override
    protected EntityManager getEntityManager() {
        return em;
    }

    public UsuarioFacade() {
        super(Usuario.class);
    }

    public Usuario consultar(Integer id) {
        
        Query q = em.createNamedQuery("Usuario.findById");
        q.setParameter("id", id);
        
        return (Usuario)q.getSingleResult();
    }
    
    /**
     * Consulta si un usuario existe en el sistema
     * @param usuario
     * @param password
     * @return Usuario si existe, null sino
     */
    public Usuario existeUsuario(String usuario, String password ) {
        Usuario user = null;
        
        Query q = em.createNamedQuery("Usuario.findByNombreAndPassword");
        q.setParameter("nombre", usuario);
        q.setParameter("password", password);
        
        try{
           user = (Usuario)q.getSingleResult();
        }catch (NoResultException e){
            
        }
        
        return user;
  
    }
    
    /**
     * Consulta si el usuario esta activo en el sistema
     * @param id
     * @return 
     */
    public boolean isActivo (Integer id){
        
        Usuario u = this.consultar(id);
        
        if (u.getEstado()==0){
            return false;
        }else{
            return true;
        }
        
        
    }
    
    
    /**
     * Insertamos un usuario en el sistema
     * @param user 
     */
    public void crearUsuario(Usuario user){
        em.persist(user);
        
    }
   
    /**
     * Edita la informacion del usuario
     * @param user 
     */
    public Usuario editarUsuario (Usuario user){
        return em.merge(user);
    }
    
    /**
     * Eliminar un usuario del sistema (desactivar)
     * @param id 
     */
    public Usuario eliminarUsuario (Usuario user){
        //Podria ser como el editar usuario, ya que es lo mismo con la excepcion
        // de que solo cambiaría el campo estado
        user.setEstado(0);
        return editarUsuario(user);
    }
    
    
}
